package oop;

/* 练习4：
创建一个动物继承结构：

创建一个父类 Animal，包含一个方法 makeSound()，该方法应输出 "Some generic animal sound"。
创建两个子类：
Dog，覆盖 makeSound() 方法，输出 "Woof woof"。
Cat，覆盖 makeSound() 方法，输出 "Meow meow"。
编写一个方法 playSound(Animal animal)，并传入不同的 Animal 子类对象，展示多态的使用。
 */
public class Practice04 {
    public static void main(String[] args) {
        Animal[] animals = new Animal[2];
        // 将 Animal 变量分别指向子类 Dog 对象和子类 Cat 对象
        animals[0] = new Dog();
        animals[1] = new Cat();
        playSound(animals[0]);
        playSound(animals[1]);
    }

    public static void playSound(Animal animal){
        animal.makeSound();
    }
}

class Animal { //父类
    public void makeSound() {
        System.out.println("父类方法被调用：Some generic animal sound");
    }
}

class Dog extends Animal { //子类1：Dog
    @Override
    public void makeSound() { //重写父类中的 makeSound 方法
        System.out.println("子类Dog类方法被调用：Woof woof");
    }
}

class Cat extends Animal { //子类2：Cat
    @Override
    public void makeSound() { //重写父类中的 makeSound 方法
        System.out.println("子类Cat类方法被调用：Meow meow");
    }
}
